package com.autoglm.android

import android.app.Application
import androidx.room.Room
import com.autoglm.android.core.IntentRecognizer
import com.autoglm.android.core.TaskPlanner
import com.autoglm.android.core.VoiceCommandProcessor
import com.autoglm.android.core.db.AppKnowledgeBase
import com.autoglm.android.core.db.AppKnowledgeDatabase
import com.autoglm.android.core.execution.CrossAppExecutionEngine
import com.autoglm.android.core.execution.TaskStateManager
import com.autoglm.android.core.llm.LLMService
import com.autoglm.android.core.llm.ZhipuAIService

/**
 * AutoGLM应用程序类，负责初始化各组件
 */
class AutoGLMApplication : Application() {
    
    // 数据库实例
    lateinit var database: AppKnowledgeDatabase
        private set
    
    // 应用知识库
    lateinit var appKnowledgeBase: AppKnowledgeBase
        private set
    
    // 大模型服务
    lateinit var llmService: LLMService
        private set
    
    // 意图识别器
    lateinit var intentRecognizer: IntentRecognizer
        private set
    
    // 任务规划器
    lateinit var taskPlanner: TaskPlanner
        private set
    
    // 语音命令处理器
    lateinit var voiceCommandProcessor: VoiceCommandProcessor
        private set
    
    // 任务状态管理器
    lateinit var taskStateManager: TaskStateManager
        private set
    
    override fun onCreate() {
        super.onCreate()
        
        // 初始化数据库
        database = Room.databaseBuilder(
            applicationContext,
            AppKnowledgeDatabase::class.java,
            "autoglm-database"
        ).build()
        
        // 初始化应用知识库
        appKnowledgeBase = AppKnowledgeBase(database)
        
        // 初始化大模型服务（需要从配置读取API密钥）
        val apiKey = getApiKey()
        val modelId = getModelId()
        llmService = ZhipuAIService(apiKey, modelId)
        
        // 初始化意图识别器
        intentRecognizer = IntentRecognizer(llmService)
        
        // 初始化任务规划器
        taskPlanner = TaskPlanner(appKnowledgeBase, llmService)
        
        // 初始化任务状态管理器
        taskStateManager = TaskStateManager()
        
        // 注意：CrossAppExecutionEngine需要AccessibilityService的实例，
        // 这会在服务启动时单独初始化
        
        // 初始化语音命令处理器（暂时传null作为executionEngine）
        // 实际使用时需要在AccessibilityService中配置
        voiceCommandProcessor = VoiceCommandProcessor(
            intentRecognizer,
            taskPlanner,
            /* executionEngine = */ null as CrossAppExecutionEngine?, // 将在服务中设置
            appKnowledgeBase,
            llmService
        )
    }
    
    /**
     * 获取API密钥，优先从安全存储获取
     */
    private fun getApiKey(): String {
        // TODO: 从安全存储中获取API密钥
        return "YOUR_API_KEY_HERE" // 仅作示例，实际应用中应从安全存储获取
    }
    
    /**
     * 获取模型ID，优先从配置获取
     */
    private fun getModelId(): String {
        // TODO: 从配置中获取模型ID
        return "glm-4-plus" // 默认使用GLM-4-Plus
    }
    
    /**
     * 更新命令处理器的执行引擎
     */
    fun updateExecutionEngine(executionEngine: CrossAppExecutionEngine) {
        // 创建新的命令处理器实例
        voiceCommandProcessor = VoiceCommandProcessor(
            intentRecognizer,
            taskPlanner,
            executionEngine,
            appKnowledgeBase,
            llmService
        )
    }
} 